<?php
// 防止恶意调用
if (!defined('IN_TG')) {
    exit('Access decline');
}


/**
 * 查询一共销售了多少展区，只算已付款订单
 * @return int 返回数量
 */
function sale_expo_num($project_id, $price_id, $dbconn)
{
    $project_id = _is_num($project_id);
    $price_id = _is_num($price_id);
    if ($project_id==0 || $price_id==0) {
        return 0;
    }
    $sale_total_num = $dbconn->sql_num_rows("SELECT order_id FROM meeting_buy_reg_expo_lists WHERE isdeleted=0 AND project_id=" . $project_id . " AND price_id=" . $price_id . " AND is_payment=1 AND pay_amount>0 ");
    return $sale_total_num;
}
/**
 * 查询一共销售了多少门票，只算已付款订单
 * @return int 返回数量
 */
function sale_ticket_num($project_id, $price_id, $dbconn)
{
    $project_id = _is_num($project_id);
    $price_id = _is_num($price_id);
    if ($project_id == 0 || $price_id == 0) {
        return 0;
    }
    $sale_total_num = $dbconn->sql_num_rows("SELECT order_id FROM meeting_buy_reg_ticket_lists WHERE isdeleted=0 AND project_id=" . $project_id . " AND price_id=" . $price_id . " AND is_payment=1 AND pay_amount>0 ");
    return $sale_total_num;
}


/**
 * 比较展会日期是否大于当前时间
 * @return bool 结束了返回true，没结束返回false
 */
function compare_expo_data($expo_data)
{
    if (!$expo_data) {
        return false;
    }
    $new_expo_data = $expo_data. ' 23:59:59';
    if (strtotime($new_expo_data) - time() > 0 ) {
        return false; // 活动没有结束呢
    } else {
        return true; // 已经结束了
    }
    
}

/**
 * openid_get() 验证openid是否为空
 * @return string 返回openid
 */
function openid_get($openid)
{
    if (!$openid) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"失败，请重新打开小程序\"}";
        exit();
    }
    $openid = htmlspecialchars($openid);
    return $openid;
}


/**
 * chk_url_source() 访问api页面的来源验证
 * @return string 不能直接访问，来源域名必须是servicewechat.com，否则终止，不提示任何文字
 */
function url_source_chk()
{
    // HTTP_REFERER引用页不能为空（页面来源）
    $referer_come_url = @$_SERVER['HTTP_REFERER'];
    // slog($referer_come_url);
    if (!isset($referer_come_url)) {
        // echo '禁止直接访问';
        exit();
    }
    // 解析 URL，返回其组成部分（scheme、host、port、user、pass、path、query在问号?之后、fragment在散列符号#之后）
    $url_info = parse_url($referer_come_url);
    $come_host = $url_info['host'];  // HTTP_REFERER页面中的域名
    // $cur_domain = $_SERVER["SERVER_NAME"];  // 当前页面不带HTTP的域名部分
    $cur_domain = 'servicewechat.com';
    // 比较2个域名是否相同
    // slog($cur_domain. $come_host);
    if ($cur_domain != $come_host) {
        // echo '不同域名禁止访问';
        exit();
    }
}



/**
 * usr_sign_chk()小程序端传来usr_sign加密秘钥串是否合法有效
 * @param string $_string 要过滤的email
 */
function usr_sign_chk($signstr, $usr_sign, $openid)
{
    if (!isset($signstr)) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    // 验证$signstr,等于dream_ren_3016
    if ($signstr != 'dream_ren_3016') {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    // 验证 $usr_sign
    if (!$usr_sign) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"请重新打开小程序\"}";
        exit();
    }
    $cry = new OpensslCrypt(); // 引入OpensslCrypt类
    /**
     * $usr_sign验证开始
     * $usr_sign是小程序进入时获取openid和session_key成功时，生成的用户身份加密秘钥，并返回到小程序，也存储在数据库中（数据库中没有做验证使用）
     * 主要包含："action" => 'dream_mini', "open_id" => $change_new_arr['openid'], "dmf" => $_SERVER["SERVER_NAME"], "expt" => time() + 8640000
     * 用于在后续获取数据库内容时，验证用户身份使用
     */
    $usr_sign_arr = $cry->dec(trim($usr_sign)); // 解密
    if (!$usr_sign_arr) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"请重新打开小程序\"}";
        exit();
    }
    if (!isset($usr_sign_arr['action'])) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    if (!$usr_sign_arr['action']) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    if ($usr_sign_arr['action'] != 'dream_mini') {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    if (!isset($usr_sign_arr['open_id'])) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    if (!$usr_sign_arr['open_id']) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    if ($usr_sign_arr['open_id'] != $openid) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    if (!isset($usr_sign_arr['dmf'])) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    // 生成usr_sign和当前页面域名都是：mini.liumaomao.cn
    if ($usr_sign_arr['dmf'] != $_SERVER["SERVER_NAME"]) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    if (!isset($usr_sign_arr['expt'])) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    // 生成usr_sign时expt加了100天，如果小于当前time，就是超时了。
    if ($usr_sign_arr['expt'] <= time()) {
        echo "{\"errCode\":\"1001\",\"errMsg\":\"来源错误\"}";
        exit();
    }
    // $usr_sign验证结束
}



/**
 * 根据起点坐标和终点坐标测距离
 * @param  [array]   $from 	[起点坐标(经纬度),例如:array(118.012951,36.810024)]
 * @param  [array]   $to 	[终点坐标(经纬度)]
 * @param  [bool]    $km        是否以公里为单位 false:米 true:公里(千米)
 * @param  [int]     $decimal   精度 保留小数位数
 * @return [string]  距离数值
 */
function get_distance($from,$to,$km=true,$decimal=2){
	sort($from);
	sort($to);
    // $EARTH_RADIUS = 6370.996; // 地球半径系数
    $EARTH_RADIUS = 6371.393; // 地球半径系数
	$distance = $EARTH_RADIUS*2*asin(sqrt(pow(sin( ($from[0]*pi()/180-$to[0]*pi()/180)/2),2)+cos($from[0]*pi()/180)*cos($to[0]*pi()/180)* pow(sin( ($from[1]*pi()/180-$to[1]*pi()/180)/2),2)))*1000;
    if($km){
        $distance = $distance / 1000;
    }
    return round($distance, $decimal);
}


// // 计算距离的目标位置，不动，所有人向此坐标比较距离
// $center_lng=116.403963; // 经度 此为天安门坐标
// $center_lat=39.915119; // 纬度 此为天安门坐标
// // 设备所在位置
// $device_lng=116.561373; // 经度 八通线传媒大学站
// $device_lat=39.9152; // 纬度 八通线传媒大学站
// // PI就是圆周率π，PI是弧度制的π,也就是180° 所以，Math.PI = 3.14 = 180°
// // 下列cos(x)sin(x)其中x需要转换角度值才行，所以乘以π再除于180（x*PI/180)，直接写方式为：cos( x * 3.1415926 / 180 )
// $PI=3.1415926 /180;
// $EarthRadius=6371.393;
// $DistanceNum=$EarthRadius*acos(cos($center_lat* $PI)*cos($device_lat* $PI)*cos(($center_lng- $device_lng)* $PI)+sin($center_lat* $PI)*sin($device_lat* $PI));
// $DistanceNum=$DistanceNum;
// echo $DistanceNum;
// // asp没有arccos（acos）函数，网上找的反余弦函数

// function acos($x) {
//     if (abs($x)==1) {
//         $acos=0;
//     }
//     $acos = atan2(-$x / sqrt(-$x * $x + 1)) + 2 * atan2(1);
// 		// exit function
// 	// end if
// }

?>